parser grammar XMLParser;

options {
  language = Java;
  tokenVocab = XMLLexer;
}


@header {package PL.practica8;}

@members{
ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

  public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

  public ArrayList getListaErrores(){return errores;}


@Override
  public void reportError (RecognitionException e){
    System.err.println (getErrorMessage(e, getTokenNames()));
    errores.add(e);
}



}


entrada:etiqueta*;

etiqueta
  : ABRIRANGULO id1 = ID (ATRIBUTO)* CERRARANGULO elemento ANGULOSLASH id2 = ID CERRARANGULO
  { if (!id1.getText().equals(id2.getText())) 
    System.err.println ("Error - etiqueta abierta " + id1.getText() +
              " (linea = " + id1.getLine() + ", columna = " + id1.getCharPositionInLine() + ") " +
                        "No concuerda con la etiqueta de cierre " + id2.getText() +
                        " (linea = " + id2.getLine() + ", columna = " + id2.getCharPositionInLine() + ")"); };
  
elemento : (etiqueta|VALOR)*; 

